<?php

namespace app\admin\middleware;

use think\facade\Request;
use app\system\model\RoleMenu;
use think\helper\Str;

/**
 * 权限检查
 */
class Method
{

    /**
     * 其他权限检查(除创始人外)
     */
    private function other($admin, $request, \Closure $next)
    {
        // 应用名称
        $appName = app('http')->getName();
        // 控制器
        $controller = strtolower(Request::controller());
        // 方法
        $action = Request::action();
        // 获取配置
        $lock = base_path() . $appName . '/config/menu.php';
        if (file_exists($lock)) {
            // 获取权限配置并检查
            $role = $appName . '/' . $controller . '/' . $action;
            $check = RoleMenu::where('role_id', $admin->role_id)->where('role_name', $role)->find();
            if (empty($check)) {
                if (Request::isAjax()) {
                    return json(['msg' => '抱歉，您没有执行此操作的权限。']);
                } else {
                    $uri = $_SERVER['REQUEST_URI'];
                    $ext = Str::contains($uri, 'iframe=') ? '?iframe=1' : '';
                    return redirect(url('admin/dashboard/message')->build() . $ext);
                }
            }
        }
        return $next($request);
    }

    /**
     * 处理请求
     */
    public function handle($request, \Closure $next)
    {
        // 登录信息
        $admin = $request->user;
        // 创始人, 拥有全部权限
        if ($admin->id == 1) {
            return $next($request);
        }
        // 其他权限检查
        return $this->other($admin, $request, $next);
    }
}
